package com.innerclass_;

/**
 * @Author 小闽
 * @Date 2024/9/20 8:27
 * @PackageName: com.innerclass_
 * @ClassName: StaticInnerClass
 * @Description: 静态内部类
 * @Version 1.0
 */
public class StaticInnerClass {
    public static void main(String[] args) {
        Outer7 outer7 = new Outer7();
        outer7.test();
        // 外部其他类访问静态内部类
        // 方式一：
        // 因为静态内部类是可以通过类名直接访问的（前提是满足访问修饰权限）
        Outer7.InnerClass03 innerClass03 = new Outer7.InnerClass03();
        innerClass03.say();
        // 方式二：
        // 编写一个方法，直接返回静态内部对象的实例。
        Outer7.InnerClass03 innerClass031 = outer7.getInnerClass03();
        innerClass031.say();
        // 编写一个静态方法，直接返回静态内部对象的实例。
        Outer7.InnerClass03 innerClass03_ = Outer7.getInnerClass03_();
        innerClass03_.say();
    }
}
class Outer7{// 外部类
    private int n1 = 88;
    private static String name = "张三";
    // 1. 静态内部类本质上是一个成员，但是在外部类的成员位置
    // 2. static修饰
    // 3. 可以直接访问外部类的所有静态成员，包含私有的，但不能直接访问非静态成员。
    // 4. 可以添加任意访问修饰符（public、protected、默认、private），因为它的地位就是一个成员。
    // 5. 作用域：同其他的成员，为整个类体。
    public static class InnerClass03{
        public void say(){
            System.out.println(name);
        }
    }
    public void test(){
        InnerClass03 innerClass03 = new InnerClass03();
        innerClass03.say();
    }
    // 编写一个方法，用于返回静态内部成员的对象
    public InnerClass03 getInnerClass03(){
        return new InnerClass03();
    }
    // 编写一个静态方法，用于返回静态内部成员的对象
    public static InnerClass03 getInnerClass03_(){
        return new InnerClass03();
    }
}
